package com.auicyh.tylb.activity;

import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.WindowManager;

/**
 * 作者：  Ocean 2018/8/29 9:56
 * 功能：   1. 权限申请。2. 屏幕常亮、状态栏隐藏等设置。
 * 邮箱：   1126067113@qq.com
 * 修改人：
 * 公司: 北京天元陆兵汽车科技有限公司
 * @author Ocean
 */
public class PermissionsActivity extends AppCompatActivity {
    /** 拥有权限 */
    public static int PERMISSION_GRANTED = 1;
    /** 申请过被拒绝了返回-1 */
    public static int PERMISSION_DENIED = -1;
    /** 且勾选了不在提示的选择框返回-2 */
    public static int PERMISSION_DENIED_TICKED = -2;

    /**
     * 这个方法用于检查查询是否拥有当前权限，
     * 如果拥有返回1,
     * 如果申请过被拒绝了返回-1，
     * 如果申请过被拒绝了并且勾选了不在提示的选择框返回-2
     * 这个方法可在子类中调用，用于权限检查。
     * <p>
     * 这里主要使用 shouldShowRequestPermissionRationale()进行权限检查
     * 用户请求过权限，单被拒绝了shouldShowRequestPermissionRationale()返回true
     * 用于请求过权限，拒绝了，且勾选了不在提示 shouldShowRequestPermissionRationale() 会返回false
     * 如果设备规范禁止应用具有该权限，shouldShowRequestPermissionRationale()方法也会返回 false
     * </p>
     * @param permissions 要检查的权限
     * @return 返回值
     */
    public int onCheckPermission(String... permissions) {
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
                    // 用户拒绝过这个权限了，应该提示用户，为什么需要这个权限。
                    return PERMISSION_DENIED;
                } else {
                    //  申请授权。
                    return PERMISSION_DENIED_TICKED;
                }
            }
        }
        return PERMISSION_GRANTED;
    }

    /**
     * 申请权限
     * @param code        请求码
     * @param permissions 要请求的权限
     */
    public void onRequestPermission(int code, String... permissions) {
        ActivityCompat.requestPermissions(this, permissions, code);
    }

    /**
     * 重写onRequestPermissionsResult()方法，处理请求结果
     * @param requestCode  请求码
     * @param permissions  权限
     * @param grantResults 请求结果
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0) {
                    int result = PackageManager.PERMISSION_GRANTED;
                    // 用户同意授权 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                    for (int grantResult : grantResults) {
                        if (grantResult == PackageManager.PERMISSION_DENIED) {
                            result = PackageManager.PERMISSION_DENIED;
                            break;
                        }
                    }
                    if (result == PackageManager.PERMISSION_GRANTED) {
                        // 用户授权
                        onPermissionsGranted();
                    } else {
                        // 用户拒绝了权限
                        onPermissionsDenied();
                    }

                } else {
                    // 用户拒绝权限
                    onPermissionsDenied();
                }
                break;
            default:

                break;
        }
    }

    public void onPermissionsDenied() {
    }

    public void onPermissionsGranted() {
    }

    /**
     * 设置屏幕状态信息，如屏幕常量、隐藏状态栏、默认不弹出键盘等信息
     */
    public void setScreenState() {
        // 设置窗体常亮 This inspection reports unnecessary creation of array expression to be passed as an argument to varargs parameter
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        // 设置键盘默认不弹出
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        // 隐藏状态栏
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}
